package dao

import (
	"time"
)

// 这是 CouponUser 的全局公开dao对象，被service层调用!
var CouponUserDao = couponUserDao{}

// 优惠券用户使用表
// 这是 coupon_user表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type CouponUser struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	UserId     int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                 // 用户ID
	CouponId   int32     `json:"coupon_id" form:"coupon_id" v:"coupon_id" db:"coupon_id"`         // 优惠券ID
	Status     int16     `json:"status" form:"status" v:"status" db:"status"`                     // 使用状态, 如果是0则未使用；如果是1则已使用；如果是2则已过期；如果是3则已经下架；
	UsedTime   time.Time `json:"used_time" form:"used_time" v:"used_time" db:"used_time"`         // 使用时间
	StartTime  time.Time `json:"start_time" form:"start_time" v:"start_time" db:"start_time"`     // 有效期开始时间
	EndTime    time.Time `json:"end_time" form:"end_time" v:"end_time" db:"end_time"`             // 有效期截至时间
	OrderId    int32     `json:"order_id" form:"order_id" v:"order_id" db:"order_id"`             // 订单ID
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除

}

// 注意:这是 CouponUser 的私有dao对象，只能在dao层内使用!
type couponUserDao struct {
	InsertTemplate func(arg CouponUser) (int64, error)            //插入一条记录
	UpdateTemplate func(arg CouponUser) (int64, error)            //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                  `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (CouponUser, error)             `args:"id"` //根据传入的主键获取一条记录
	List           func(arg CouponUserList) ([]CouponUser, error) //模糊分页查询
}

/*
// 这是 coupon_user 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type CouponUserPostman struct {
id
user_id
coupon_id
status
used_time
start_time
end_time
order_id
add_time
update_time
deleted

}*/

// 这是 coupon_user 表的批量请求参数
type CouponUserReq struct {
	List []CouponUser `json:"list" form:"list"`
}

// 这是 couponUserDao.List()方法的请求参数
type CouponUserList struct {
	Page
}
